widget: Warn if size-unqueried widgets get allocated
authorBenjamin Otte <otte@redhat.com>
Mon, 28 Sep 2015 03:21:06 +0000 (05:21 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 28 Oct 2015 18:44:28 +0000 (19:44 +0100)
Widgets should have gtk_widget_get_preferred_width/height() called
on them before gtk_widget_size_allocate() gets called.
Add a check for this.

gtk/gtkwidget.c
gtk/gtkwidgetprivate.h

index f6c7699b169c5a23b4875ce98aef652305ec8859..15579a9cc1ea1c5c46016fc4cb015743158c2752 100644 (file)
@@ -5845,6 +5845,13 @@ gtk_widget_size_allocate_with_baseline (GtkWidget     *widget,
   gtk_widget_push_verify_invariants (widget);
 
 #ifdef G_ENABLE_DEBUG
+  if (gtk_widget_get_resize_needed (widget))
+    {
+      g_warning ("Allocating size to %s %p without calling gtk_widget_get_preferred_width/height(). "
+                 "How does the code know the size to allocate?",
+                 gtk_widget_get_name (widget), widget);
+    }
+
   if (GTK_DEBUG_CHECK (GEOMETRY))
     {
       gint depth;
index 2e02308eea86b263ec26c8d23fb8dc37a8b0f8c5..566a562cbd3f74cee92aa110189078ef8dea642d 100644 (file)
@@ -288,6 +288,12 @@ gboolean          gtk_widget_has_size_request              (GtkWidget *widget);
 
 /* inline getters */
 
+static inline gboolean
+gtk_widget_get_resize_needed (GtkWidget *widget)
+{
+  return widget->priv->resize_needed;
+}
+
 static inline GtkWidget *
 _gtk_widget_get_parent (GtkWidget *widget)
 {